/**
 * 服务器的入口文件
 */
// 1.创建KOA的实例对象
const Koa = require('koa')
const app = new Koa()


// 2.绑定中间件
// 绑定第一层中间件: 总耗时中间件
const respDurationMiddleware = require('./middleware/koa_response_duration')
app.use(respDurationMiddleware)

// 绑定第二层中间件: 响应头中间件
const respHeaderMiddleware = require('./middleware/koa_response_header')
app.use(respHeaderMiddleware)

// 绑定第三层中间件: 业务逻辑中间件(读取文件数据)
const respDataMiddleware = require('./middleware/koa_response_data')
app.use(respDataMiddleware)

// 3.绑定端口号 8888
app.listen(8888, ()=>{
    // 只有请求地图数据时，用到了 8888 端口
    console.log('服务器已开启', 'http://127.0.0.1:8888')
    console.log('WebSocket服务器地址 ', 'ws://localhost:9998')
})


/*
// WebSocket的引入
// WebSocket可以保持着浏览器和客户端之间的长连接，通过WebSocket可以实现数据由后端推送到前端,保证了数据传输的实时性.
// WebSocket涉及到前端代码和后端代码的改造
const WebSocket = require('ws')  // npm i ws -S
const wss = new WebSocket.Server({  // 创建出WebSocket实例对象, 绑定的端口号为9998
    port: 9998
})

// 对客户端的连接事件进行监听,  client: 代表的是客户端的连接socket对象
wss.on('connection', client=>{
    console.log('有客户端连接成功了...')

    // 对客户端的连接对象进行message事件的监听, msg: 有客户端发给服务端的数据
    client.on('message', msg=>{
        console.log('客户端发送给服务端的数据: '+ msg)

        // 由服务端发送数据给客户端
        client.send('hello socket from backend')
    })
})
*/

const webSocketService = require('./service/web_socket_service')
// 开启服务端的监听，监听客户端的连接
// 当某一个客户端连接成功之后，就会对这个客户端进行 message 事件的监听
webSocketService.listen()
